<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 试输出斐波那契数列的前10项，即1、1、2、3、5、8、13、21、34、55

        // 缓存对象
        var cache = {};

        // 创建一个函数，功能是返回下标为n的这项的数字
        function fib(n) {
            // 判断缓存对象中有没有这个值，如果有，直接用
            if (cache.hasOwnProperty(n)) {
                return cache[n];
            }
            // 缓存对象没有这个值
            // 看下标n是不是0或者是不是1，如果是，就返回常数1
            // 如果不是，就递归
            var v = n == 0 || n == 1 ? 1 : fib(n - 1) + fib(n - 2);
            // 写入缓存。也就是说，每算一个值，就要把这个值存入缓存对象。
            cache[n] = v;
            return v;
        }

        for (let i = 0; i <= 9; i++) {
            console.log(fib(i));
        }

    </script>
</body>

</html>